package org.cis.jproyinv.proyecto.dao;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.cis.jproyinv.dao.ServicioDao;
import org.cis.jproyinv.proyecto.modelo.ProyectoInvestigacion;

public class ProyectoInvestigacionDao extends ServicioDao<ProyectoInvestigacion, Long> {

    @Override
    public ProyectoInvestigacion buscar(Long id) {
        return getEm().find(ProyectoInvestigacion.class, id);
    }

    @Override
    public List<ProyectoInvestigacion> buscarTodos() {
        return getEm().createQuery("select pro from ProyectoInvestigacion pro").getResultList();
    }

    public ProyectoInvestigacion buscarXTema(String criterio) {
        ProyectoInvestigacion proyecto = new ProyectoInvestigacion();
        proyecto = (ProyectoInvestigacion) getEm().createQuery("select pro from ProyectoInvestigacion pro where pro.tema = '" + criterio + "'").getSingleResult();
        return proyecto;
    }

    public List<ProyectoInvestigacion> buscarCriterio(String criterio) {
        List<ProyectoInvestigacion> resultadoBusqueda = new ArrayList();
        resultadoBusqueda.addAll(getEm().createQuery("select pro from ProyectoInvestigacion pro where pro.tags like '%" + criterio + "%' or pro.tema like '%" + criterio + "%'").getResultList());
        return resultadoBusqueda;
    }

    public List<ProyectoInvestigacion> proyectosCumplidos() {
        Date fechaActual = new Date();
        Date fechaProyecto = new Date();
        List<ProyectoInvestigacion> cumplidos = new ArrayList();
        List<ProyectoInvestigacion> todos = new ArrayList();
        todos = this.buscarTodos();
        for (ProyectoInvestigacion pI : todos) {
            fechaProyecto = pI.getCronograma().getFechaFin();
            if (cumplido(fechaActual, fechaProyecto) == true) {
                cumplidos.add(pI);
            }
        }
        return cumplidos;
    }

    public boolean cumplido(Date fechaActual, Date fechaProyecto) {
        boolean ver = false;
        if ((fechaActual.getMonth() + 1) >= fechaProyecto.getMonth()) {
            if ((fechaActual.getDay() == fechaProyecto.getDay()) || (fechaActual.getDate() >= fechaProyecto.getDay())) {
                ver = true;
            }
        }
        return ver;
    }
}
